package com.itheima.day11_in_outStream.Demo8;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;

/*
8、【编号1905】对象序列化是一个用于将对象状态转换为字节流的过程，
可以将其保存到磁盘文件中或通过网络发送到任何其他程序；
从字节流创建对象的相反的过程称为反序列化。 现已知学生实体类（Student），
包含姓名和年龄属性。请编写程序将若干学生对象保存到当前模块的下的object.txt文件中，
保存成功后，还可以读取文件获取到这些学生对象。 提示：从文件中读取对象时，
与读取其他数据不同，readObject方法是通过抛出异常（EOFException）来表示到达文件末尾的，
所以循环读取多个对象时，可以通过捕获该异常来结束读取。
除了这种方式还可以怎样比较方便的将多个学生对象只读写一次，以避免此问题？
 */
public class Demo8 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ArrayList<Student> list = new ArrayList<>();
        Student stu1 = new Student("明凯",23);
        Student stu2 = new Student("自豪",25);
        Student stu3 = new Student("韦神",28);
        Collections.addAll(list,stu1,stu2,stu3);

        //创建序列化流 写入
        ObjectOutputStream oos =new ObjectOutputStream(new FileOutputStream("HomeWork\\object.txt"));
        //使用集合创建对象
             oos.writeObject(list);
             oos.close();
//        oos.writeObject(stu1);
//        oos.writeObject(stu2);
//        oos.writeObject(stu3);

        //创建反序列化流 读取
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("HomeWork\\object.txt"));
        ArrayList<Student> stu = (ArrayList<Student>) ois.readObject();
        stu.forEach((s)->{
            System.out.println(s);
        });



        /*while (true) {
            try {
                Student stu  = (Student) ois.readObject();
                System.out.println(stu);
            }  catch (EOFException e) {
                break;*/
                /*e.printStackTrace();*/
            }
        }




